package de.preisrobot.business.parser.mindfactory;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
import de.preiscrawler.AlleAnbieter;
import de.preisrobot.business.parser.AbstractArtikelItemParser;
import de.preisrobot.business.parser.AbstractParser;
import de.preisrobot.entity.Artikel;
import de.preisrobot.service.internal.PreisRobotParserException;

public class MindfactoryArtikelListParser extends AbstractParser
{

   @Override
   public void parseStream(List<Artikel> list, InputStream in) throws IOException, PreisRobotParserException
   {
      Source s = new Source(in);
      parserSource(list, s);
   }

   private void parserSource(List<Artikel> list, Source s)
   {
      List<Element> artikelItem = s.getAllElementsByClass("pa10_4");
      for (Element element : artikelItem)
      {

         // filter auf css classen/Elemente mit preis (element div class=...)
         List<Element> allElementsByClass = element.getAllElementsByClass("prod_preisbox floatRight");
         if (allElementsByClass.isEmpty())
            continue;

         Artikel a = new Artikel();
         MindfactoryArtikelItemParser p = new MindfactoryArtikelItemParser(element);
         p.parseArtikelItem(a);
         list.add(a);
      }
   }

   class MindfactoryArtikelItemParser extends AbstractArtikelItemParser
   {

      public MindfactoryArtikelItemParser(Element rootArtikelItem)
      {
         super(rootArtikelItem);

      }

      @Override
      protected void parseArtikelBeschreibung(Artikel a)
      {
         List<Element> allElementsByClass = rootArtikelItem
            .getAllElementsByClass("prod_descr floatRight size11 colorblack");
         Element element = allElementsByClass.get(0);
         List<Element> allElements = element.getAllElements("a");
         Element aElem = allElements.get(0);
         String beschreibung = aElem.getTextExtractor().toString();
         a.setDesc(beschreibung);

      }

      @Override
      protected void parseArtikelKurzBeschreibung(Artikel a)
      {

         List<Element> divkurzbez = rootArtikelItem.getAllElementsByClass("prod_bezname floatLeft");
         Element element = divkurzbez.get(0);
         List<Element> allElements = element.getAllElements("a");
         Element aelemKurzbez = allElements.get(0);
         String kurzbez = aelemKurzbez.getTextExtractor().toString();
         a.setArtikelPreislink(kurzbez);
      }

      @Override
      protected void parseArtikelNr(Artikel a)
      {
         List<Element> divkurzbez = rootArtikelItem.getAllElementsByClass("prod_bezname floatLeft");
         Element element = divkurzbez.get(0);
         List<Element> allElements = element.getAllElements("a");
         Element aelemKurzbez = allElements.get(0);
         String kurzbez = aelemKurzbez.getTextExtractor().toString();
         a.setArtikelNr(kurzbez);

      }

      @Override
      protected void parseImageLink(Artikel a)
      {
         List<Element> div_pic = rootArtikelItem.getAllElementsByClass("prod_pic floatLeft");
         Element element = div_pic.get(0);
         List<Element> allElements = element.getAllElements("img");
         Element imgElem = allElements.get(0);
         String imageLink = imgElem.getAttributeValue("src");

         if (!imageLink.startsWith("http://"))
            ;
         imageLink = "http://www.mindfactory.de" + imageLink;

         a.setImageLink(imageLink);
      }

      @Override
      protected void parsePreis(Artikel a)
      {
         List<Element> divelem = rootArtikelItem.getAllElementsByClass("prod_preisbox floatRight");
         Element element = divelem.get(0);
         List<Element> preise = element.getAllElements("a");

         String euro = preise.get(0).getTextExtractor().toString();
         String cent = preise.get(1).getTextExtractor().toString();

         a.setPreis(euro + cent);

      }

      @Override
      protected void parseArtikelLink(Artikel a)
      {
         List<Element> divkurzbez = rootArtikelItem.getAllElementsByClass("prod_bezname floatLeft");
         Element element = divkurzbez.get(0);
         List<Element> allElements = element.getAllElements("a");
         Element aelemKurzbez = allElements.get(0);
         String link = aelemKurzbez.getAttributeValue("href");

         a.setArtikelLink(link);
      }

   }

   @Override
   public int getAnbieter()
   {
      return AlleAnbieter.MINDFACTORY;
   }

   @Override
   public void parseStream(List<Artikel> list, Reader in) throws IOException, PreisRobotParserException
   {
      Source s = new Source(in);
      parserSource(list, s);
   }

}
